/**
 * Created by Administrator on 2015/5/29.
 */
//nodeJS中模块和包是现代js开发，复杂工程师必备的技术之一。
//在前端工程里，我们经常把一下单独功能的js代码写在一个文件中，
//在需要使用这个功能的时候，通过script标签的src属性把文件引入进来就可以使用了。
//例如我们最常用的jQuery，能够完成某些特定功能的JS文件，就称之为一个模块。
//通过编写能够实现特定功能的文件，我就可以实现整个项目的模块化。
//当我们需要引入某个模块的时候，跟浏览器中使用script标签不同。
//在node中，我们需要使用require，然后传进去模块名。这样一个全局的函数，来引入相关的模块。
//在node中任何一个具有特定功能的文件，我们都可以把他称之为模块。
//require('../sum.js');  //将sum.js作为一个模块引入进来了，还可以正常执行。

//在执行结果里面输出了sum.js执行的结果，表明模块被成功的加载了！
//除了输入文件名的相对路径，这种require方式之外，可以忽略掉文件的后缀。
//当使用require命令之后，node会自动的把扩展名给补上。忽略掉扩展名，也会被正确的加载进来。


//能否在代码中获取到求和模块的值呢？并且能否传参数呢？？？

//通过exports这样一个全局的对象，将模块中的功能或者是函数赋给exports对象的某个属性,就可以提供给调用者使用了。
var sum=require('../sum.js'); //可以收到exports对象暴漏出来的内容。
//在接受require模块中，变量的名字跟模块的名字保持一致。这样在阅读代码中看见一个变量的名字，就知道是引用的那个模块了。
var ygl=sum.all(1000);//点后面的all 实际上就是sum.js里面exports暴漏出来的属性。all属性所对应的sum()函数。
//在这里点之前的sum,就是require到的对象，也就是exports对象的属性。all()属性实际上也是sum()方法。

console.log(ygl);//得到的结果 就是sum函数返回的结果。

//node中的require和JS中的javascript标签加载到的内容不同
//在前端JS文件中，定义的全局变量，在当前文件里是可以直接访问的。
//但是在node中，是访问不到的，在node中只能访问到node中通过exports对象暴漏出来的属性或方法。
//相当于每个模块都有一个私有的作用域。这样的好处防止不同模块间不同变量名的冲突。
